import os
import re


# 处理以下问题:
# 清理非必要的Markdown语法（如 `**加粗**` → `加粗`），去除多余的斜体（`*斜体*` → `斜体`）,但保留结构符号（如 `##` 标题）。
#
# 移除多余的 `---` 水平分割线
#
# 如果页脚内容固定（如出版信息），可以识别后批量清理。
#
# PDF 转换可能会留下页码，如 `第 1 页/共 10 页`，这在 Markdown 解析时无意义，可以去掉。
#
# 避免段落间有太多的空行，一般保持 **1 个空行** 作为段落分隔。
def clean_markdown(input_file, out_dir):
    # 获取输入文件的目录和文件名
    dir_name, file_name = os.path.split(input_file)
    # 获取文件名的主体
    file_base_name = os.path.splitext(file_name)[0]
    # 构造输出文件的路径
    if not os.path.exists(out_dir):
        os.makedirs(out_dir)
    output_file = os.path.join(out_dir, f"{file_base_name}_清洗后.md")

    # 读取原始的Markdown文件
    with open(input_file, 'r', encoding='utf-8') as file:
        content = file.read()

    # 1. 清理冗余的加粗和斜体
    content = re.sub(r'\*\*(.*?)\*\*', r'\1', content)  # **加粗**
    content = re.sub(r'\*(.*?)\*', r'\1', content)  # *斜体*

    # 2. 清理无意义的页面编号、页眉页脚信息
    content = re.sub(r'第\s*\d+\s*页/\s*共\s*\d+\s*页', '', content)

    # 3. 处理标题
    content = re.sub(r'(?<=\S)(#\s*){2,}', '# ', content)  # 统一处理多级标题

    # 4. 清理冗余空行
    content = re.sub(r'\n\s*\n', '\n\n', content)

    # 5. 移除无意义的列表和代码块标记
    content = re.sub(r'^\s*[\*\+-]\s*', '', content, flags=re.MULTILINE)  # 移除无序列表标记
    content = re.sub(r'^\s*\d+\.\s*', '', content, flags=re.MULTILINE)  # 移除有序列表标记
    content = re.sub(r'```.*?```', '', content, flags=re.DOTALL)  # 移除代码块

    # 7. 去除空的序号
    content = re.sub(r'^\s*\d+(\.\d+)*\s*\n', '', content, flags=re.MULTILINE)

    # 8. 去除无用标签（如 <!-- image -->）
    content = re.sub(r'<!--.*?-->', '', content, flags=re.DOTALL)

    # 9. 输出清理后的内容到文件
    with open(output_file, 'w', encoding='utf-8') as file:
        file.write(content)
    print(f"清理后的Markdown文件已保存至：{output_file}")
    return output_file


if __name__ == "__main__":
    source_dir = r"C:\Desktop\2md\污染排放标准相关"
    out_dir = r"C:\Desktop\2md\污染排放标准相关\清洗后"
    # 遍历输入目录下的所有文件
    for filename in os.listdir(source_dir):
        if filename.lower().endswith(".md"):
            md_path = os.path.join(source_dir, filename)
            clean_markdown(md_path, out_dir)
